#ifndef KUBAWAVEFORM_H
#define KUBAWAVEFORM_H

#include "WaveformBase.h"

// Przestrzeń nazw
namespace RafMat
{
namespace SimEngine
{

/**
    Reprezentuje wejście typu szum losowy.

    Klasa reprezentuje generator szumu losowego o modyfikowalnej wariancji
    i wartości oczekiwanej. Wykorzystuje w tym celu klasę UniformNoiseGenerator.
*/
class KubaWaveform : public WaveformBase
{
public:

    /**
        Tworzy nową instancję wejścia typu szum.
        Domyślnie wariancja wynosi 0.05.
    */
    explicit KubaWaveform(SimInterface::ISimulator& sim,
                            double variance = 0.05);

    /**
        Zwraca wyjście generatora szumu.
    */
    double getNextValue();

    /**
        Modyfikuje parametry obiektów poprzez łańcuchy znakowe.
        Dostępne parametry:
        - \c variance

        \param [in] param Parametr, który chcemy zmienić.
        \param [in] value Nowa wartość dla parametru.
        \retur True jeśli poprawnie zakończono.
    */
    virtual bool setParameter(const std::string& param, const std::string& value) throw(std::logic_error);

    /**
        Zwraca parametr obiektu jako łańcuch znakowy.
        Wspierane komenty - takie jak w setParameter.

        \param [in] param Parametr, który chcemy odczytać.
        \return Wartość parametru jako łańcuch znaków.
    */
    virtual std::string getParameter(const std::string& param) const throw(std::logic_error);

protected:
    SimFile::ConfigWriter& dumpSpecificPar(SimFile::ConfigWriter& o) const;

private:

};

}   // SimEngine namespace
}   // RafMat namespace

#endif // KUBAWAVEFORM_H
